/**
 * IUserService
 *
 * 主要职责：
 * - 注册/登录/资料维护/密码重置/用户查询
 *
 * 关键方法示例：
 * - User register(RegisterDto dto)
 * - String login(LoginDto dto)
 *
 * 实现关注点：
 * - 密码哈希、JWT 发放、验证码校验、用户资料隐私
 *
 * 答辩要点：
 * - 用户认证流程与敏感信息保护
 */
package net.zjitc.yqmusicserver.service;

import net.zjitc.yqmusicserver.domain.dto.*;
import net.zjitc.yqmusicserver.domain.vo.UserManagementVO;
import net.zjitc.yqmusicserver.domain.vo.UserVO;
import net.zjitc.yqmusicserver.result.PageResult;
import net.zjitc.yqmusicserver.result.Result;

import java.util.List;

/**
 * IUserService 定义用户相关的业务契约（接口）。
 *
 * 在答辩中可以这样描述：Controller 只负责请求/响应的转换，
 */
public interface IUserService {
    // 发送验证码
    Result sendVerificationCode(String email);
    //验证验证码
    boolean verifyVerificationCode(String email, String verificationCode);
    // 用户注册
    Result register(UserRegisterDTO userRegisterDTO);
    // 用户登录
    Result login(UserLoginDTO userLoginDTO);
    // 用户信息
    Result<UserVO> userInfo();
    // 更新用户信息
    Result updateUserInfo(UserDTO userDTO);
    // 更新用户头像
    Result updateUserAvatar(String avatarUrl);
    // 更新用户密码
    Result updateUserPassword(UserPasswordDTO userPasswordDTO, String token);
    // 重置用户密码
    Result resetUserPassword(UserResetPasswordDTO userResetPasswordDTO);
    // 退出登录
    Result logout(String token);
    // 注销账号
    Result deleteAccount();
    // 获取所有用户数量
    Result<Long> getAllUsersCount();
    // 获取所有用户
    Result<PageResult<UserManagementVO>> getAllUsers(UserSearchDTO userSearchDTO);
    // 添加用户
    Result addUser(UserAddDTO userAddDTO);
    // 更新用户
    Result updateUser(UserDTO userDTO);
    // 更新用户状态
    Result updateUserStatus(Long userId, Integer userStatus);
    // 删除用户
    Result deleteUser(Long userId);
    // 批量删除用户
    Result deleteUsers(List<Long> userIds);
}
